/**
 * 给定一个包括“{”，“[”,"("、“}”，“]”,"}"的字符串s，判断字符串是否有效
 * 字符串满足：
 * 1、左字符串必须使用相同类型右括号闭合
 * 2、左括号必须以正确的顺序闭合
 * 3、每个右括号都有一个对应的相同类型的左括号
 * 示例一:
 *  输入 s = "{}"
 *  输出 true
 * 示例二:
 *  输入 s = "()[]{}"
 *  输出 true
 * 示例三:
 *  输入 s = "{]"
 *  输出 false
*/
function isValid (s) {
    const stack = [];
    // 循环遍历字符串
    for (let item of s) {
        if (["{", "[", "("].includes(item)) {
            stack.push(item);
        } else {
            // 拿到栈顶的元素
            const top = stack[stack.length - 1];
            // 匹配对上字符串出栈
            if ((item === "}" && top === "{") || (item === "]" && top === "[") || (item === ")" && top === "(")) {
                stack.pop();
            }
        }
    }
    return stack.length === 0;
}

console.log(isValid("{}"));
console.log(isValid("()[]{}"));
console.log(isValid("{]"));